home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / text / misc / RenameFont.lha / RenameFont.c < prev    next >
C/C++ Source or Header  |  1999-01-30  |  5KB  |  236 lines

  1. /* 
  2. ** RenameFonts.c
  3. */
  4.  
  5. /// Init
  6.  
  7. #include <exec/alerts.h>
  8. #include <exec/exec.h>
  9. #include <proto/exec.h>
  10.  
  11. #include <dos/dos.h>
  12. #include <dos/rdargs.h>
  13. #include <proto/dos.h>
  14.  
  15. #include <string.h>
  16.  
  17. #define BUFSIZE 8*1024
  18. #define TTF     0x00010000L
  19. #define AFM     0x53746172L
  20.  
  21. STRPTR TEMPLATE  = "FILE/A";
  22. STRPTR PROG_NAME = "RenameFont";
  23.  
  24. STRPTR VERSION = "$VER: RenameFont 1.0 (29.1.99) by Marco Amadori";
  25. /*
  26.    $Compile: math=standard NOSTACKCHECK DATA=FARONLY STRSECT=CODE DEFINE=_USEOLDEXEC_
  27.    $Link: LIBRARY lib:amiga.lib LIB:SC.lib SC SD ND
  28.  
  29.    $HISTORY:
  30.  
  31.    29 Jan 1999 : 1.0 :  First Version
  32. */
  33.  
  34. STRPTR PFB       = "%!";
  35. UBYTE  PFBPOS    = 6;
  36.  
  37. void ChangeName( STRPTR , STRPTR,  LONG );
  38. void ChangeNamePFB( STRPTR , STRPTR , LONG );
  39. void ChangeNameAMF( STRPTR , STRPTR , LONG );
  40. void ChangeNameTTF( STRPTR , STRPTR , LONG );
  41. STRPTR FindString( STRPTR , STRPTR , STRPTR , ULONG );
  42. void RenameFont( STRPTR  , STRPTR );
  43.  
  44. struct DosLibrary *DOSBase;
  45. ///
  46.  
  47. /// LONG main (void)
  48. LONG main (void)
  49. {
  50.    struct {
  51.       STRPTR FileName;
  52.    } args = {0};
  53.    struct RDArgs *rda;
  54.    LONG rc = RETURN_FAIL;
  55.  
  56.    STRPTR buffer;
  57.  
  58.    if( DOSBase = (struct DosLibrary *) OpenLibrary("dos.library", 37))
  59.    {
  60.       if( rda = (struct RDArgs *) AllocDosObject(DOS_RDARGS, 0))
  61.       {
  62.          rda->RDA_ExtHelp =
  63.          "\n"
  64.          "FILE/A:           Font to rename\n "
  65.          "                  It Recognizes: PFB,AMF \n";
  66.  
  67.          rda->RDA_Source.CS_Buffer = 0;
  68.          rda->RDA_Source.CS_Length = 0;
  69.  
  70.          if(ReadArgs( TEMPLATE, (LONG *) &args, rda))
  71.          {
  72.             if( buffer = AllocVec( BUFSIZE, MEMF_CLEAR))
  73.             {
  74.                ChangeName( args.FileName, buffer, BUFSIZE);
  75.                rc = RETURN_OK;
  76.                FreeVec( buffer);
  77.             } else Alert(AT_Recovery | AG_NoMemory | AO_ExecLib);
  78.             FreeArgs(rda);
  79.          } else PrintFault(IoErr(), PROG_NAME);
  80.          FreeDosObject( DOS_RDARGS, (APTR) rda);
  81.       } else Alert(AT_Recovery | AG_NoMemory | AO_ExecLib);
  82.       CloseLibrary ((struct Library *) DOSBase);
  83.    } else Alert(AT_Recovery | AG_OpenLib | AO_DOSLib);
  84.    
  85.    return rc;
  86. }
  87. ///
  88.  
  89.  /// void ChangeName(STRPTR filename, STRPTR buffer, LONG dim)
  90. void ChangeName(STRPTR filename, STRPTR buffer, LONG dim)
  91. {
  92.    BPTR filelock;
  93.    STRPTR s,r;
  94.  
  95.    if( filelock = Open( filename, MODE_OLDFILE))
  96.    {
  97.       if( Read( filelock, (void *) buffer, dim))
  98.       {
  99.          switch ( *( (LONG *) buffer) )
  100.          {
  101.             case AFM:
  102.                ChangeNameAMF(filename, (STRPTR) buffer, dim);
  103.                break;
  104.             case TTF:
  105.                ChangeNameTTF(filename, (STRPTR) buffer, dim);
  106.                break;
  107.             default:
  108.                for( s = buffer+PFBPOS, r = PFB; *r == *s ; r++, s++);
  109.                if(*r == 0) ChangeNamePFB(filename, (STRPTR) buffer, dim);
  110.                else Printf( "Unknow Font Type: %s\n", filename);
  111.          }
  112.       } else PrintFault(IoErr(),filename);
  113.       Close(filelock);
  114.    }
  115. }
  116. ///
  117.  
  118. /// void ChangeNamePFB(BPTR filelock, STRPTR buffer, LONG BufDim)
  119. void ChangeNamePFB(STRPTR oldfilename, STRPTR buffer, LONG BufDim)
  120. {
  121.    STRPTR bra="FontName /",ket=" def";
  122.    STRPTR ext=".PFB";
  123.    STRPTR filename,s,r;
  124.  
  125.    if( filename = FindString( buffer, bra, ket, BufDim))
  126.    {
  127.       for( s = filename; *s ; s++);
  128.       for( r = ext ; *r; *s++ = *r++);
  129.       *s = 0;
  130.       Printf("Rename %s as %s\n", oldfilename, filename);
  131.       RenameFont( oldfilename, filename);
  132.    }
  133. }
  134. ///
  135.  
  136. /// void ChangeNameAMF(STRPTR oldfilename, STRPTR buffer, LONG BufDim)
  137. void ChangeNameAMF(STRPTR oldfilename, STRPTR buffer, LONG BufDim)
  138. {
  139.    STRPTR bra="FontName ";
  140.    STRPTR ext=".AFM";
  141.    STRPTR filename,s,r;
  142.  
  143.    if( filename = FindString( buffer, bra, 0, BufDim))
  144.    {
  145.       for( s = filename; *s ; s++);
  146.       for( r = ext ; *r; *s++ = *r++);
  147.       *s = 0;
  148.       Printf("Rename %s as %s\n", oldfilename, filename);
  149.  
  150.       RenameFont( oldfilename, filename);
  151.    }
  152. }
  153. ///
  154.  
  155. void ChangeNameTTF(STRPTR oldfilename, STRPTR buffer, LONG BufDim)
  156. {
  157.    Printf("TTF Font\n");
  158. }
  159.  
  160. /// STRPTR FindString( STRPTR buff, STRPTR bra, STRPTR ket, ULONG dim)
  161. STRPTR FindString( STRPTR buff, STRPTR bra, STRPTR ket, ULONG dim)
  162. {
  163.    /*
  164.       Return the string between bra & ket
  165.       if ket = 0 then takes the string until eol
  166.    */
  167.  
  168.    STRPTR s,r,s1,s2;
  169.    LONG i;
  170.  
  171.    i = dim;
  172.    r=bra;s1=buff;
  173.    while (*r && i)
  174.    {
  175.       r=bra;
  176.       for( s = s1; *r == *s ; r++, s++);
  177.       if(*r != 0)
  178.       {
  179.          s1++;
  180.          i--;
  181.       }
  182.       else s1 = s;
  183.    }
  184.    if(i && ket) // bra found
  185.    {
  186.       r=ket;s2=s1;
  187.       while (*r && i)
  188.       {
  189.          r=ket;
  190.          for( s = s2; *r == *s ; r++, s++);
  191.          if(*r != 0)
  192.          {
  193.             s2++;
  194.             i--;
  195.          }
  196.       }
  197.       if(i)    // ket found
  198.       {
  199.          *s2 = 0;
  200.          return s1;
  201.       }
  202.    } else if(ket == 0)
  203.    {
  204.       for(s=s1; (*s != 0x0a) && (*s != 0x0d) ; s++);
  205.       *s = 0;
  206.       return s1;
  207.    }
  208.    return 0;
  209. }
  210. ///
  211.  
  212. /// void RenameFont( STRPTR from , STRPTR to)
  213. void RenameFont( STRPTR from , STRPTR to)
  214. {
  215.    BPTR olddir,currdir;
  216.    STRPTR s;
  217.    char c;
  218.  
  219.    s = PathPart( from);
  220.    c = *s; *s= 0;
  221.  
  222.    if( currdir = Lock( from, ACCESS_READ ))
  223.    {
  224.       if( olddir = CurrentDir( currdir))
  225.       {
  226.          *s = c;
  227.          s = FilePart(from);
  228.          if( !Rename( s, to)) PrintFault( IoErr(), s);
  229.       } else PrintFault(IoErr(), from);
  230.       CurrentDir( olddir);
  231.    } else PrintFault(IoErr(), from);
  232.    UnLock( currdir);
  233. }
  234. ///
  235.  
  236.